<?php

namespace app\admin\model\shopro\commission;

use app\admin\model\shopro\Common;
use app\admin\model\shopro\user\User;

/**
 * 分销商升级记录
 * */
class AgentUpLog extends Common
{
    protected $pk = 'user_id';

    protected $name = 'shopro_commission_agent_up_log';

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id', 'id')->field('id, nickname, avatar, mobile, total_consume, parent_user_id');
    }

    /**
     * 记录用户升级记录
     * @param int $userId 用户ID
     * @param int|null $newLevel 新等级（可选）
     * @param int|null $newHonor 新奖衔（可选）
     * @return bool
     */
    public static function upgradeUserUpLog(int $userId, ?int $newLevel = null, ?int $newHonor = null): bool
    {
        // 查询当前用户数据
        $current = Agent::where('user_id', $userId)->find();

        if (!$current) {
            return false; // 用户不存在
        }

        $currentLevel = (int)$current->level;
        $currentHonor = (int)$current->honor;

        // 计算新的等级和奖衔
        $finalLevel = $newLevel ?? $currentLevel;
        $finalHonor = $newHonor ?? $currentHonor;

        // 只有等级或奖衔发生变化时才记录
        if ($currentLevel === $finalLevel && $currentHonor === $finalHonor) {
            return false;
        }

        // 记录升级日志
        self::create([
            'user_id' => $userId,
            'level' => $finalLevel,  // 当前等级（即新等级）
            'before_level' => $currentLevel,
            'after_level' => $finalLevel,
            'honor' => $finalHonor,  // 当前奖衔（即新奖衔）
            'before_honor' => $currentHonor,
            'after_honor' => $finalHonor,
            'createtime' => time(),
        ]);

        return true;
    }


    /**
     * 获取指定时间内升级后等级为4的会员ID列表
     *
     * @param int $startTime 开始时间戳
     * @param int $endTime 结束时间戳
     * @return array 会员ID数组
     */
    public static function getUserIdsUpToLevel5(int $startTime, int $endTime): array
    {
        return self::where('after_level', 5)
            ->where('createtime', 'between', [$startTime, $endTime])
            ->distinct(true)
            ->column('user_id');
    }

    /**
     * 获取指定时间内有奖衔的用户
     *
     * @param int $startTime 开始时间戳
     * @param int $endTime 结束时间戳
     * @return array 会员ID数组
     */
    public static function getUserIdsHonor(int $startTime, int $endTime): array
    {
        return self::where('honor', '>=', 1)
            ->where('createtime', 'between', [$startTime, $endTime])
            ->distinct(true)
            ->column('user_id');
    }

}
